package com.tsf.hbase.jpa;

import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.regionserver.BloomType;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import static org.apache.hadoop.hbase.io.compress.Compression.Algorithm;

/**
 * hbase数据表信息定义
 *
 * @author taoningbo
 * @since 1.0, Created as 2018/11/26
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface HBaseTable {

    /**
     * 数据表名称，等同于hbase的TableName属性
     */
    String name();

    /**
     * 列族名，可以指定多个列族
     */
    String[] families() default {"data"};

    /**
     * 是否启用存储压缩模式，默认{@link HTableDescriptor#DEFAULT_COMPACTION_ENABLED}
     */
    boolean compactionEnabled() default HTableDescriptor.DEFAULT_COMPACTION_ENABLED;

    /**
     * 存储压缩方式，默认{@link Algorithm#LZO}
     */
    Algorithm compressionType() default Algorithm.LZO;

    /**
     * (BLOCKCACHE)是否开启blockCache，‘true’表示开启，‘false’表示关闭， 默认值请看{@link HColumnDescriptor#DEFAULT_BLOCKCACHE}
     */
    boolean blockCache() default HColumnDescriptor.DEFAULT_BLOCKCACHE;

    /**
     * (BLOCKSIZE)hbase的BLOCKSIZE的值，默认为{@link HColumnDescriptor#DEFAULT_BLOCKSIZE}
     */
    int blockSize() default HColumnDescriptor.DEFAULT_BLOCKSIZE;

    /**
     * (BLOOMFILTER)支持过滤条件，默认按照‘ROW’行进行过滤，请看{@link BloomType#ROW}
     */
    BloomType bloomFilterType() default BloomType.ROW;

    /**
     * (TTL)数据过期时间，不填写表示使用hbase内部默认值，默认值请看{@link HColumnDescriptor#DEFAULT_TTL}
     */
    int timeToLive() default HColumnDescriptor.DEFAULT_TTL;

    /**
     * (SPLITS)预分区的字符集，不填写表示不欲分区
     */
    String splitKeys() default "";
}
